1. Field of the Invention
The present invention relates to techniques for developing and testing software for multi-processor environments.
2. Description of the Related Art
This section introduces aspects that may help facilitate a better understanding of the invention. Accordingly, the statements of this section are to be read in this light and are not to be understood as admissions about what is prior art or what is not prior art.
A heterogeneous, multi-processor system has a number of different processors of two or more different types that are available to perform a variety of different functions. When designing such a system for a particular application or family of applications, it is desirable to develop software that distributes the application functionality over those multiple different processors in an efficient manner.
For a system comprising processors of different types with arbitrary data exchange facilities and control interconnections, source code texts for application program modules (APMs) designed to be run on dedicated processors (DPs) of one or another type are given. There exists explicit or implicit information concerning which APMs can be run on each different type of DP. This information can either be (i) derived via automatic source code analysis or (ii) supplied in separate files. In general, the system and the APMs satisfy the following conditions:                Every APM can be run on at least one type of DP in the system;        The same APM can be used in a multiplicity of DPs simultaneously or chained, if needed;        Multiple APMs can be run sequentially at the same DP;        All of the DPs are assigned to solve a given set of common complex computational tasks including, in general, case complex data dependencies provided by the given assemblage of APMs.Developing a schedule for a multi-processor system (i.e., assigning different APMs to the different DPs of such a system and determining the relative timing of the execution of those APMs on those DPs) involves two functions:        1. Checking whether a given computational task is accomplishable using the given population of DPs (i.e., in a given computational basis); and        2. If so, then assigning certain APMs to certain DPs in order to provide correct non-redundant data flow and synchronization while obtaining, for example, minimal throughput latency or a minimal total number of DPs engaged.        
Conventional approaches to scheduling leave a considerable part of the job either for a runtime scheduling algorithm or to the application programmer. In the former case, the computational burden of the on-line scheduling function can be unacceptably high and, in the latter case, the mainly manual optimization by developers can take an unreasonable amount of effort.